package cn.iocoder.yudao.module.promotion.service.domainmanage;

import cn.iocoder.yudao.module.promotion.controller.admin.domainmanage.vo.DomainManageCreateReqVO;
import cn.iocoder.yudao.module.promotion.controller.admin.domainmanage.vo.DomainManageExportReqVO;
import cn.iocoder.yudao.module.promotion.controller.admin.domainmanage.vo.DomainManagePageReqVO;
import cn.iocoder.yudao.module.promotion.controller.admin.domainmanage.vo.DomainManageUpdateReqVO;
import cn.iocoder.yudao.module.promotion.convert.domainmanage.DomainManageConvert;
import cn.iocoder.yudao.module.promotion.dal.dataobject.domainmanage.DomainManageDO;
import cn.iocoder.yudao.module.promotion.dal.mysql.domainmanage.DomainManageMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import java.util.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.infra.enums.ErrorCodeConstants.DOMAIN_MANAGE_NOT_EXISTS;

/**
 * 域名管理 Service 实现类
 *
 * @author 超级管理员
 */
@Service
@Validated
public class DomainManageServiceImpl implements DomainManageService {

    @Resource
    private DomainManageMapper domainManageMapper;

    @Override
    public Long createDomainManage(DomainManageCreateReqVO createReqVO) {
        // 插入
        DomainManageDO domainManage = DomainManageConvert.INSTANCE.convert(createReqVO);
        domainManageMapper.insert(domainManage);
        // 返回
        return domainManage.getId();
    }

    @Override
    public void updateDomainManage(DomainManageUpdateReqVO updateReqVO) {
        // 校验存在
        validateDomainManageExists(updateReqVO.getId());
        // 更新
        DomainManageDO updateObj = DomainManageConvert.INSTANCE.convert(updateReqVO);
        domainManageMapper.updateById(updateObj);
    }

    @Override
    public void deleteDomainManage(Long id) {
        // 校验存在
        validateDomainManageExists(id);
        // 删除
        domainManageMapper.deleteById(id);
    }

    private void validateDomainManageExists(Long id) {
        if (domainManageMapper.selectById(id) == null) {
            throw exception(DOMAIN_MANAGE_NOT_EXISTS);
        }
    }

    @Override
    public DomainManageDO getDomainManage(Long id) {
        return domainManageMapper.selectById(id);
    }

    @Override
    public List<DomainManageDO> getDomainManageList(Collection<Long> ids) {
        return domainManageMapper.selectBatchIds(ids);
    }

    @Override
    public PageResult<DomainManageDO> getDomainManagePage(DomainManagePageReqVO pageReqVO) {
        return domainManageMapper.selectPage(pageReqVO);
    }

    @Override
    public List<DomainManageDO> domainList(DomainManagePageReqVO pageReqVO) {
        return domainManageMapper.selectList(pageReqVO);
    }

    @Override
    public List<DomainManageDO> getDomainManageList(DomainManageExportReqVO exportReqVO) {
        return domainManageMapper.selectList(exportReqVO);
    }

    @Override
    public void closeDomainManage(Long id) {
        // 校验存在
        validateDomainManageExists(id);
        // 更新
        DomainManageDO updateObj = new DomainManageDO().setId(id).setStatus((byte) 1);
        domainManageMapper.updateById(updateObj);
    }
}
